package jmine.tec.rpc.server.representation;

/**
 * Interface para representadores, capazes de transformar objetos de uma determinada classe em uma representação.
 * 
 * @author lundberg
 * @param <R> tipo de representação
 * @param <E> tipo de entidade representada
 */
public interface Representer<R, E> {

    /**
     * Classe da representação criada.
     * 
     * @return class
     */
    Class<? extends R> getRepresentationClass();

    /**
     * Classe do tipo de objeto a ser representado
     * 
     * @return class
     */
    Class<? extends E> getRepresentedClass();

    /**
     * Cria uma representação do objeto
     * 
     * @param context context
     * @param object objeto
     * @return representação
     */
    R represent(RepresentationContext context, E object);
}
